/*
 * PruebaCompresor.cpp
 *
 *  Created on: 20/05/2013
 *      Author: jonathan
 */

#include "PruebaCompresor.h"
#include "../commons/Compresor.h"
#include "../typedefs.hpp"
#include "generico/ResultadoTest.h"
#include <iostream>

void PruebaCompresor::before(){
	this->borrarArchivo("pruebaUnario");
	this->borrarArchivo("pruebaGamma");
	this->borrarArchivo("pruebaDelta");
	this->borrarArchivo("pruebaGolomb");
}
ResultadoTest PruebaCompresor::escribirCodigoUnario(){
	ResultadoTest res("escribirCodigoUnario");
	BitStream * bs = new BitStream("pruebaUnario", ios_base::out);
	Compresor * c = new Compresor(bs);
	c->escribirUnario(10);
	c->escribirUnario(7);
	c->escribirUnario(50);
	bs->close();
	delete (bs);
	delete (c);
	bs = new BitStream("pruebaUnario",ios_base::in);
	c = new Compresor(bs);
	res.assertTrue(c->leerUnario() == 10, "Fallo lectura 10");
	res.assertTrue(c->leerUnario() == 7, "Fallo lectura 7");
	res.assertTrue(c->leerUnario() == 50, "Fallo lectura 50");
	delete (bs);
	delete (c);
	return res;
}

ResultadoTest PruebaCompresor::escribirCodigoGamma(){
	ResultadoTest res("escribirCodigoGamma");
	BitStream * bs = new BitStream("pruebaGamma", ios_base::out);
	Compresor * c = new Compresor(bs);
	c->escribirGamma(2);
	c->escribirGamma(7);
	c->escribirGamma(50);
	bs->close();
	delete (bs);
	delete (c);
	bs = new BitStream("pruebaGamma",ios_base::in);
	c = new Compresor(bs);
	res.assertTrue(c->leerGamma() == 2, "Fallo lectura 2");
	res.assertTrue(c->leerGamma() == 7, "Fallo lectura 7");
	res.assertTrue(c->leerGamma() == 50, "Fallo lectura 50");
	delete (bs);
	delete (c);
	return res;
}


ResultadoTest PruebaCompresor::escribirCodigoDelta(){
	ResultadoTest res("escribirCodigoDelta");
	BitStream * bs = new BitStream("pruebaDelta", ios_base::out);
	Compresor * c = new Compresor(bs);
	c->escribirDelta(2);
	c->escribirDelta(7);
	c->escribirDelta(50);
	bs->close();
	delete (bs);
	delete (c);
	bs = new BitStream("pruebaDelta",ios_base::in);
	c = new Compresor(bs);
	res.assertTrue(c->leerDelta() == 2, "Fallo lectura 2");
	res.assertTrue(c->leerDelta() == 7, "Fallo lectura 7");
	res.assertTrue(c->leerDelta() == 50, "Fallo lectura 50");
	delete (bs);
	delete (c);
	return res;
}

ResultadoTest PruebaCompresor::escribirCodigoGolomb(){
	ResultadoTest res("escribirCodigoGolomb");
	BitStream * bs = new BitStream("pruebaGolomb", ios_base::out);
	Compresor * c = new Compresor(bs);
	c->escribirGolomb(10,1);
	c->escribirGolomb(7,4);
	c->escribirGolomb(50,1);
	delete (bs);
	delete (c);
	bs = new BitStream("pruebaGolomb",ios_base::in);
	c = new Compresor(bs);
	res.assertTrue(c->leerGolomb(1) == 10, "Fallo lectura 10");
	res.assertEquals( 7, c->leerGolomb(4));
	res.assertTrue(c->leerGolomb(1) == 50, "Fallo lectura 50");
	cout<< endl;
	delete (bs);
	delete (c);
	return res;

}

void PruebaCompresor::run(){
	ResultadoTest resTotal("----------------TESTCOMPRESOR OK ------------------");
	resTotal.assertTrue(this->escribirCodigoUnario().getResultado(), "Test1");
	resTotal.assertTrue(this->escribirCodigoGamma().getResultado(), "Test2");
	resTotal.assertTrue(this->escribirCodigoGolomb().getResultado(), "Test3");
	resTotal.assertTrue(this->escribirCodigoDelta().getResultado(), "Test4");
	resTotal.getResultado();
}

void PruebaCompresor::after(){

}
